// -*- mode: c++; coding: utf-8 -*-

#ifndef _ANORMALITY
#define _ANORMALITY

#include <Ice/BuiltinSequences.ice>
#include "Types.ice"

module Oculus
{	 

  class QueryResult {};

  // Información de una trayectoria.
  struct MovementBelief
  {
    // Identificador de la trayectoria.
    string movement;
    // Valor de satisfacción de las restricciones de rol.
    float MAR;
    // Valor de satisfacción de las restricciones espaciales.
    float MSR;
    // Valor de satisfacción de las restricciones temporales.
    float MTR;
    // Valor de satisfacción de las restricciones de destino.
    // float destination;
    // Valor de satisfacción global de la trayectoria.
    float belief;
  };
  ["java:type:java.util.Vector<MovementBelief>"]
  sequence<MovementBelief> MovementBeliefSeq;

  struct MovementDistance
  {
    // Identificador de la trayectoria.
    string movement;
    // Identificador de la zona de terminación trayectoria.
    string end;
    // Valor de satisfacción global.
    float belief;
  };
  sequence<MovementDistance> MovementDistanceSeq;

  // Trayectoria asociada.
  struct RecognizedMovement
  {
    // Identificador de la trayectoria.
    string movement;
    // Valor de creencia.
    float belief;
  };
  sequence<RecognizedMovement> RecognizedMovementSeq;

  // Información a notificar.
  class MovementQueryResult extends QueryResult
  {
    LocationSeq locations;
    MovementBeliefSeq movementBeliefs;
    // MovementDistanceSeq movementDistances;
    // RecognizedMovementSeq recognizedMovements;
  };

  struct AnormalityInfo
  {
    // Identificador de la cámara.
    int camera;
    // Identificador del objeto.
    string id;
    // Frame analizado.
    int frame;
    // Clasificación del objeto (vehículo, peatón, etc).
    RoleSeq obj;
    //Moment t;
    MovementQueryResult res;
  };

  interface AA
  {
    /**
     * Notify the violation of the normality.
     * @param ai The anormality information.
     **/
    void notify (AnormalityInfo ai);
  };

};

#endif
